home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / general / procssng / ccs / ccs-11tl.lha / lbl / x11 / lib / find_mmm.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-03-08  |  1.9 KB  |  86 lines

  1. /*    Find_Min_Max . C
  2. %
  3. %    Copyright (c)    see included header file
  4. */
  5.  
  6. #include "function.h"
  7.  
  8. CENR    cer[3];    /*    color editor register    */
  9.  
  10. Find_3_min_max(img, histp, dp, nouse)
  11. U_IMAGE    *img;
  12. int    *histp;
  13. byte    *dp;
  14. {
  15. register int    i, j, m, *hp;
  16.  
  17. if (img->color_form != CFM_SCF) {
  18.     for (i=0; i<img->channels; i++)    {
  19.     hp = histp + i*HistoSize;
  20.     j = -1;
  21.     while (!hp[++j]);
  22. /*    img->marray[i].min = MAX(VCTEntry, j);    */
  23.     cer[i].lower = img->marray[i].min = j;
  24.     m = 0;
  25.     while (++j<HistoSize)
  26.         if (m < hp[j])    m = hp[j];
  27.     img->marray[i].maxcnt = m;
  28.     while (!hp[--j]);
  29.     cer[i].upper = img->marray[i].max = j;
  30.     cer[i].curve = ETALinear;
  31.     }
  32. } else    {
  33. register int    l=HistoSize, v, max_cnt=0;
  34.     hp = histp;
  35.     while (l--)
  36.         if (hp[l] > max_cnt)
  37.             max_cnt = hp[l];
  38.     for (i=0; i<3; i++)    {
  39.         for (j=l=256, m=0; j--;) {
  40.         v = reg_cmap[i][j];
  41.         if (v < l)    l = v;
  42.         if (v > m)    m = v;
  43.     }
  44.     cer[i].lower = img->marray[i].min = l;
  45.     cer[i].upper = img->marray[i].max = m;
  46.     cer[i].curve = ETALinear;
  47.     img->marray[i].maxcnt = max_cnt;
  48.     }
  49. }
  50. img->mmm = img->marray[0];
  51. message("maxc1=%d, maxc2=%d, maxc3=%d\n",
  52.     img->marray[0].maxcnt,img->marray[1].maxcnt,img->marray[2].maxcnt);
  53. }
  54.  
  55.  
  56. Find_min_max(img, histp, dp, histocalc, permanent)
  57. U_IMAGE    *img;
  58. int    *histp;
  59. byte    *dp;
  60. {
  61. if (histp)    {
  62. register int    *hp=histp, fsize=img->width * img->height, i = -1;
  63.     if (!dp)    dp = (byte *)img->src + img->fn * fsize;
  64.     if (histocalc)
  65.     img->marray[img->fn].maxcnt = histogram(dp, fsize, histp, img);
  66.     if (img->color_dpy)
  67.     Find_3_min_max(img, histp, dp, No);
  68.     else    {
  69.     while (hp[++i]==0);
  70.     img->mmm.min = i;
  71.     fsize = HistoSize;
  72.     while (hp[--fsize]==0);
  73.     img->mmm.max = fsize;
  74.     img->mmm.maxcnt = img->marray[img->fn].maxcnt;
  75.     if (permanent)    {
  76.         img->marray[img->fn].min = i;
  77.         img->marray[img->fn].max = fsize;
  78.     }
  79.     }
  80.     if (img->color_dpy)
  81.     for (i=img->channels; i<3; i++)
  82.         img->marray[i] = img->marray[0];
  83. }
  84. return    (int) histp;
  85. }
  86.